﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;

namespace OEMS
{
    /// <summary>
    /// Klasse om onderdelen of een combinatie in pdf op te slaan
    /// </summary>
    /// <author>Ronald Geladé</author>
    public static class ExportPdf
    {
        /// <summary>
        /// Slaat motorgegevens op in een pdfbestand, eventueel met grafiek
        /// </summary>
        /// <param name="filePath">Bestandspad</param>
        /// <param name="motor">Motorobject</param>
        /// <param name="grafiek">Boolean die bepaalt of de grafiek ook moet worden geëxporteerd</param>
        /// <author>Ronald Geladé</author>
        public static void ToPdf(string filePath, Motor motor, Boolean grafiek)
        {
            // Code nog aanpassen voor echte grafiek
            System.Drawing.Image testgrafiek = System.Drawing.Image.FromFile(@"..\..\chart\pic.bmp");
            Image afbeeldingGrafiek = iTextSharp.text.Image.GetInstance(testgrafiek, System.Drawing.Imaging.ImageFormat.Bmp);

            OptimaalPunt op = new OptimaalPunt(motor);
            Document doc = new Document(iTextSharp.text.PageSize.A4, 30, 30, 20, 20);
            PdfWriter wri = PdfWriter.GetInstance(doc, new System.IO.FileStream(filePath, FileMode.Create));;

            PdfContentByte line;
            Paragraph paragraph;


            // Schrijven naar document
            try
            {
                doc.Open(); // Document openen

                line = wri.DirectContent;

                paragraph = new Paragraph(
                    "Motor: " +
                    motor.NominaalVermogen.ToString().Substring(0, motor.NominaalVermogen.ToString().IndexOf(',') + 3) + "kW " +
                    motor.Klasse + " " +
                    motor.NominaalToerental.ToString().Substring(0, motor.NominaalToerental.ToString().IndexOf(',')) + "t/min",
                    new Font(Font.FontFamily.HELVETICA, 20, Font.BOLD)
                    );
                doc.Add(paragraph);

                line.SetLineWidth(2.0f);
                line.MoveTo(30, doc.Top - 40f);
                line.LineTo(540, doc.Top - 40f);
                line.Stroke();

                paragraph = new Paragraph("Motorgegevens", new Font(Font.FontFamily.HELVETICA, 14, Font.BOLD));
                paragraph.SpacingBefore = 20;
                doc.Add(paragraph);

                line.SetLineWidth(1.0f);
                line.MoveTo(30, doc.Top - 75f);
                line.LineTo(540, doc.Top - 75f);
                line.Stroke();

                paragraph = new Paragraph("Nominaal Vermogen");
                paragraph.SpacingBefore = 10;
                doc.Add(paragraph);

                paragraph = new Paragraph("Klasse");
                doc.Add(paragraph);

                paragraph = new Paragraph("Nominaal Toerental");
                doc.Add(paragraph);

                paragraph = new Paragraph("Optimaal punt", new Font(Font.FontFamily.HELVETICA, 14, Font.BOLD));
                paragraph.SpacingBefore = 15;
                doc.Add(paragraph);

                line.SetLineWidth(1.0f);
                line.MoveTo(30, doc.Top - 175f);
                line.LineTo(540, doc.Top - 175f);
                line.Stroke();

                paragraph = new Paragraph("Toerental: " + op.Toerental);
                paragraph.SpacingBefore = 10;
                doc.Add(paragraph);

                paragraph = new Paragraph("Koppel: " + op.Koppel);
                doc.Add(paragraph);

                paragraph = new Paragraph("Rendement: " + op.Rendement);
                doc.Add(paragraph);

                if (grafiek)
                {
                    paragraph = new Paragraph("Grafiek", new Font(Font.FontFamily.HELVETICA, 14, Font.BOLD));
                    paragraph.SpacingBefore = 15;
                    doc.Add(paragraph);

                    line.SetLineWidth(1.0f);
                    line.MoveTo(30, doc.Top - 275f);
                    line.LineTo(540, doc.Top - 275f);
                    line.Stroke();
                    doc.Add(afbeeldingGrafiek);
                }
            }
            catch (IOException ex)
            {
                throw ex;
            }
            finally
            {
                doc.Close(); // Document sluiten
            }
        }

        /// <summary>
        /// Slaat overbrengingsgegevens op in een pdfbestand, eventueel met grafiek
        /// </summary>
        /// <param name="filePath">Bestandspad</param>
        /// <param name="overbrenging">Overbrengingsobject</param>
        /// <param name="grafiek">Boolean die bepaalt of de grafiek ook moet worden geëxporteerd</param>
        public static void ToPdf(string filePath, Overbrenging overbrenging, Boolean grafiek)
        {
            // Code nog aanpassen voor echte grafiek
            System.Drawing.Image testgrafiek = System.Drawing.Image.FromFile(@"..\..\chart\pic.bmp");
            Image afbeeldingGrafiek = iTextSharp.text.Image.GetInstance(testgrafiek, System.Drawing.Imaging.ImageFormat.Bmp);

            OptimaalPunt op = new OptimaalPunt(overbrenging);
            Document doc = new Document(iTextSharp.text.PageSize.A4, 30, 30, 20, 20);
            PdfWriter wri = PdfWriter.GetInstance(doc, new System.IO.FileStream(filePath, FileMode.Create));

            PdfContentByte line;
            Paragraph paragraph;

            // Schrijven naar document
            try
            {
                doc.Open(); // Document openen

                line = wri.DirectContent;

                paragraph = new Paragraph(
                    "Overbrenging: " + overbrenging.Type,
                    new Font(Font.FontFamily.HELVETICA, 20, Font.BOLD)
                    );
                doc.Add(paragraph);

                line.SetLineWidth(2.0f);
                line.MoveTo(30, doc.Top - 40f);
                line.LineTo(540, doc.Top - 40f);
                line.Stroke();
                
                line.SetLineWidth(1.0f);
                line.MoveTo(30, doc.Top - 75f);
                line.LineTo(540, doc.Top - 75f);
                line.Stroke();

                paragraph = new Paragraph("Toerental: " + op.Toerental);
                paragraph.SpacingBefore = 10;
                doc.Add(paragraph);

                paragraph = new Paragraph("Koppel: " + op.Koppel);
                doc.Add(paragraph);

                paragraph = new Paragraph("Rendement: " + op.Rendement);
                doc.Add(paragraph);

                if (grafiek)
                {
                    paragraph = new Paragraph("Grafiek", new Font(Font.FontFamily.HELVETICA, 14, Font.BOLD));
                    paragraph.SpacingBefore = 15;
                    doc.Add(paragraph);

                    line.SetLineWidth(1.0f);
                    line.MoveTo(30, doc.Top - 175f);
                    line.LineTo(540, doc.Top - 175f);
                    line.Stroke();
                    doc.Add(afbeeldingGrafiek);
                }
            }
            catch (IOException ex)
            {
                throw ex;
            }
            finally
            {
                doc.Close(); // Document sluiten
            }
        }

        /// <summary>
        /// Slaat belastingsgegevens op in een pdfbestand, eventueel met grafiek
        /// </summary>
        /// <param name="filePath">Bestandspad</param>
        /// <param name="overbrenging">Belastingsobject</param>
        /// <param name="grafiek">Boolean die bepaalt of de grafiek ook moet worden geëxporteerd</param>
        public static void ToPdf(string filePath, Belasting belasting, Boolean grafiek)
        {
            // Code nog aanpassen voor echte grafiek
            System.Drawing.Image testgrafiek = System.Drawing.Image.FromFile(@"..\..\chart\pic.bmp");
            Image afbeeldingGrafiek = iTextSharp.text.Image.GetInstance(testgrafiek, System.Drawing.Imaging.ImageFormat.Bmp);

            OptimaalPunt op = new OptimaalPunt(belasting);
            Document doc = new Document(iTextSharp.text.PageSize.A4, 30, 30, 20, 20);
            PdfWriter wri = PdfWriter.GetInstance(doc, new System.IO.FileStream(filePath, FileMode.Create));

            PdfContentByte line;
            Paragraph paragraph;

            // Schrijven naar document
            try
            {
                doc.Open(); // Document openen

                line = wri.DirectContent;

                paragraph = new Paragraph(
                    "Belasting: " + belasting.Type,
                    new Font(Font.FontFamily.HELVETICA, 20, Font.BOLD)
                    );
                doc.Add(paragraph);

                line.SetLineWidth(2.0f);
                line.MoveTo(30, doc.Top - 40f);
                line.LineTo(540, doc.Top - 40f);
                line.Stroke();

                line.SetLineWidth(1.0f);
                line.MoveTo(30, doc.Top - 75f);
                line.LineTo(540, doc.Top - 75f);
                line.Stroke();

                paragraph = new Paragraph("Toerental: " + op.Toerental);
                paragraph.SpacingBefore = 10;
                doc.Add(paragraph);

                paragraph = new Paragraph("Koppel: " + op.Koppel);
                doc.Add(paragraph);

                paragraph = new Paragraph("Rendement: " + op.Rendement);
                doc.Add(paragraph);

                if (grafiek)
                {
                    paragraph = new Paragraph("Grafiek", new Font(Font.FontFamily.HELVETICA, 14, Font.BOLD));
                    paragraph.SpacingBefore = 15;
                    doc.Add(paragraph);

                    line.SetLineWidth(1.0f);
                    line.MoveTo(30, doc.Top - 175f);
                    line.LineTo(540, doc.Top - 175f);
                    line.Stroke();
                    doc.Add(afbeeldingGrafiek);
                }
            }
            catch (IOException ex)
            {
                throw ex;
            }
            finally
            {
                doc.Close(); // Document sluiten
            }
        }

        /// <summary>
        /// Slaat een combinatie van onderdelen op in een pdfbestand, eventueel met grafiek
        /// </summary>
        /// <param name="filePath">Bestandspad</param>
        /// <param name="combinatie">Combinatieobject</param>
        /// <param name="grafiek">Boolean die bepaalt of de grafiek ook moet worden geëxporteerd</param>
        /// <author>Ronald</author>
        public static void ToPdf(string filePath, Combinatie combinatie, Boolean grafiek)
        {
            Motor motor = MotorDB.GetMotorFromId(combinatie.MotorGegevensId);
            Overbrenging overbrenging = OverbrengingDB.GetOverbrengingFromId(combinatie.OverbrengingGegevensId);
            Belasting belasting = BelastingDB.GetBelastingFromId(combinatie.BelastingGegevensId);

            // Code nog aanpassen voor echte grafiek
            System.Drawing.Image testgrafiek = System.Drawing.Image.FromFile(@"..\..\chart\pic.bmp");
            Image afbeeldingGrafiek = iTextSharp.text.Image.GetInstance(testgrafiek, System.Drawing.Imaging.ImageFormat.Bmp);

            OptimaalPunt op = new OptimaalPunt(combinatie);
            Document doc = new Document(iTextSharp.text.PageSize.A4, 30, 30, 20, 20);
            PdfWriter wri = PdfWriter.GetInstance(doc, new System.IO.FileStream(filePath, FileMode.Create));

            PdfContentByte line;
            Paragraph paragraph;

            // Schrijven naar document
            try
            {
                doc.Open(); // Document openen

                line = wri.DirectContent;

                paragraph = new Paragraph(
                    "Combinatie: " +
                    motor.NominaalVermogen.ToString().Substring(0, motor.NominaalVermogen.ToString().IndexOf(',') + 3) + "kW " +
                    motor.Klasse + " " +
                    motor.NominaalToerental.ToString().Substring(0, motor.NominaalToerental.ToString().IndexOf(',')) + "t/min - " +
                    overbrenging.Type + " - " +
                    belasting.Type,
                    new Font(Font.FontFamily.HELVETICA, 20, Font.BOLD)
                    );
                doc.Add(paragraph);

                line.SetLineWidth(2.0f);
                line.MoveTo(30, doc.Top - 40f);
                line.LineTo(540, doc.Top - 40f);
                line.Stroke();

                paragraph = new Paragraph("Motorgegevens", new Font(Font.FontFamily.HELVETICA, 14, Font.BOLD));
                paragraph.SpacingBefore = 20;
                doc.Add(paragraph);

                line.SetLineWidth(1.0f);
                line.MoveTo(30, doc.Top - 75f);
                line.LineTo(540, doc.Top - 75f);
                line.Stroke();

                paragraph = new Paragraph("Nominaal Vermogen");
                paragraph.SpacingBefore = 10;
                doc.Add(paragraph);

                paragraph = new Paragraph("Klasse");
                doc.Add(paragraph);

                paragraph = new Paragraph("Nominaal Toerental");
                doc.Add(paragraph);

                paragraph = new Paragraph("Optimaal punt", new Font(Font.FontFamily.HELVETICA, 14, Font.BOLD));
                paragraph.SpacingBefore = 15;
                doc.Add(paragraph);

                line.SetLineWidth(1.0f);
                line.MoveTo(30, doc.Top - 175f);
                line.LineTo(540, doc.Top - 175f);
                line.Stroke();

                paragraph = new Paragraph("Toerental: " + op.Toerental);
                paragraph.SpacingBefore = 10;
                doc.Add(paragraph);

                paragraph = new Paragraph("Koppel: " + op.Koppel);
                doc.Add(paragraph);

                paragraph = new Paragraph("Rendement: " + op.Rendement);
                doc.Add(paragraph);

                if (grafiek)
                {
                    paragraph = new Paragraph("Grafiek", new Font(Font.FontFamily.HELVETICA, 14, Font.BOLD));
                    paragraph.SpacingBefore = 15;
                    doc.Add(paragraph);

                    line.SetLineWidth(1.0f);
                    line.MoveTo(30, doc.Top - 275f);
                    line.LineTo(540, doc.Top - 275f);
                    line.Stroke();
                    doc.Add(afbeeldingGrafiek);
                }
            }
            catch (IOException ex)
            {
                throw ex;
            }
            finally
            {
                doc.Close(); // Document sluiten
            }
        }
    }
}
